package mx.itesm.thirstforrevenge;


import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.widget.Toast;

/**
 * 
 * @author Raúl Oscar Irene Rivas
 * @author Juan Carlos Felipe Torres
 * @author Victor López
 * @author Ivan Haecker
 * @version 1.1
 * Asignación de los fondos que caracterizan cada nivel.
 * 
 */

public class PantallaJuego extends Activity implements Runnable{

	private Juego juego;
	private boolean corriendo;
	private static final int DIALOGO_SALIR = 1;
	
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		juego = new Juego(this);
		setContentView(juego);
		reproducirAudio();
	}
	
	private MediaPlayer player;
	
	/**
	 * Reproducción del sonido.
	 *  @param void
	 */
    private void reproducirAudio(){
    	if(player!=null){
    		player.release();
    	}
    	player = MediaPlayer.create(this,R.raw.musicabatalla);
    	player.start();
    }

	/**
	 * Reanudación del juego (posterior a la pausa).
	 *  @param void
	 */
	protected void onResume(){
		super.onResume();
		//Inicias animacion
		Thread th = new Thread(this);
		th.start();//Run se llama de manera indirecta con el metodo start
		//Esto es un mensaje en pantalla
		//Toast.makeText(this, "iniciando animacion", Toast.LENGTH_SHORT).show();
	}
	
	protected void onStop(){
		if (player!=null){
    		if (player.isPlaying()){
    			player.stop();
    			player.release();
    		}
    	}
		super.onStop();
		corriendo = false;
		//Mensaje en pantalla
		Toast.makeText(this, "Termina animacion", Toast.LENGTH_SHORT).show();
	}
	
	/**
	 * Detección de eventos y actualización de la pantalla.
	 * @param void 
	 */
	public void run() {
		corriendo = true;
		while (corriendo){
			juego.leerEntrada(); // Detectar eventos del touch
			juego.actualizar(); //Actualizar juego
			juego.postInvalidate();  // ejecuta onDraw
			try {
				Thread.sleep(34);
			} catch (InterruptedException e) {
			}
		}
	}

	/**
	 * Se manda a llamar a las opciones cuando se da click en el botón de menú en el keypad. 
	 * @param MenuItem  
	 */
	   @Override
	   public boolean onOptionsItemSelected(MenuItem item) {
	       switch(item.getItemId()) {
	       case R.id.Opciones:
	    	   Intent intencion1 = new Intent(this,Ajustes.class);
	    	   startActivity(intencion1);
	    	   break;
	       case R.id.AcercaDe:
	    	   Intent intencion2 = new Intent(this,AcercaDe.class);
	    	   startActivity(intencion2);
	    	   break;
	       case R.id.Salir:
	    	   showDialog(DIALOGO_SALIR);
	    	   break;
	       }
	       return true;
	   }
	   
		/**
		 * Detección del evento que genera la aparición del texto de confirmación de salida.
		 * @param int, KeyEvent
		 */
	  public boolean onKeyDown(int keyCode, KeyEvent event) {
	  		if ((keyCode == KeyEvent.KEYCODE_BACK)) {
	  			showDialog(DIALOGO_SALIR);
	  	    }
	  	    return super.onKeyDown(keyCode, event);
	  }
	   
		/**
		 * 
		 * @param Menu
		 */
	  public boolean onCreateOptionsMenu(Menu menu) {		   
			super.onCreateOptionsMenu(menu);
			MenuInflater inflater = getMenuInflater();
			inflater.inflate(R.menu.menu, menu);
			return true;
	   }
	   
	  /**
		 * Ventana que aparece cuando se desea salir de la aplicación, pide una cofirmación al usuario.
		 * @param id
		 */
	   protected Dialog onCreateDialog(int id){
	    	Dialog cuadroDialogo = null;
	    	switch(id){
	    	case DIALOGO_SALIR:
	    		AlertDialog.Builder salirBuilder = new AlertDialog.Builder(this);
	    		salirBuilder.setTitle("Salir y guardar");
	    		salirBuilder.setIcon(android.R.drawable.ic_menu_save);
	    		salirBuilder.setCancelable(false);
	    		salirBuilder.setMessage("¿Regresar al menú principal?");
	    		salirBuilder.setPositiveButton("Si", new DialogInterface.OnClickListener() {
	    			@Override
	    			/**
					 * Cierra la ventana al dar click en Si.
					 * @param DialogInterface, int
					 */
					public void onClick(DialogInterface dialog, int arg1) {
						// TODO Auto-generated method stub
						dialog.dismiss();
						finish(); //termina la actividad
					}
				});
	    		salirBuilder.setNegativeButton("NO", new DialogInterface.OnClickListener() {
					@Override
					/**
					 * Cierra la ventana al dar click en No.
					 * @param DialogInterface, int
					 */
					public void onClick(DialogInterface dialog, int arg1) {
						// TODO Auto-generated method stub
						dialog.dismiss();
					}
				});
	    		cuadroDialogo = salirBuilder.create();
	    		break;		
	    		default:
	    			break;
	    	}
			return cuadroDialogo;
	    }
}